import {
	ref,
	computed
} from 'vue';
import {
	objToParams
} from '@/common/common.js'
import {
	useUserStore
} from '@/stores/user.js'

export const maiColor = computed(() => {
	return useUserStore().userType == 2 ? "#2C5DEB" : "#00807D"
})
export const aliAppId = '2021005172636612' //阿里生活号appid
export const weChatAppId = 'wx99c87aaf47af44e3' //微信公众号appid

export const goTo = (url, data = {}, options = {}) => {
	// 参数验证
	if (!url || typeof url !== 'string') {
		console.error('无效的跳转链接:', url);
		return Promise.reject(new Error('无效的跳转链接'));
	}

	// 处理参数
	let toUrl = url;
	if (data && typeof data === 'object' && Object.keys(data).length !== 0) {
		try {
			const queryString = Object.keys(data)
				.map(key => {
					const value = data[key];
					const encodedValue = typeof value === 'object' ?
						encodeURIComponent(JSON.stringify(value)) :
						encodeURIComponent(value);
					return `${encodeURIComponent(key)}=${encodedValue}`;
				})
				.join('&');

			const separator = url.includes('?') ? '&' : '?';
			toUrl = `${url}${separator}${queryString}`;
		} catch (error) {
			console.error('参数序列化失败:', error);
			return Promise.reject(new Error('参数序列化失败'));
		}
	}

	// 支持的跳转方法映射
	const METHODS = {
		navigateto: uni.navigateTo,
		relaunch: uni.reLaunch,
		redirectto: uni.redirectTo,
		switchtab: uni.switchTab,
		navigateback: uni.navigateBack // 注意：navigateBack 不支持 url
	};

	// 从 options 中获取跳转方式，默认为 navigateTo
	let method = (options.method || 'navigateTo').toLowerCase();

	// 特殊逻辑：如果目标页面是 tabBar 页面，自动使用 switchTab（可选）
	// 示例：假设你知道某些页面是 tab 页
	const isTabPage = ['/pages/index/index', '/pages/user/user'].some(tabUrl =>
		toUrl.startsWith(tabUrl)
	);
	if (isTabPage && method === 'navigateto') {
		method = 'switchtab'; // 自动切换为 switchTab
	}

	// 映射方法名到实际 API
	const uniMethod = METHODS[method];
	if (!uniMethod) {
		console.error('不支持的跳转方式:', method);
		return Promise.reject(new Error(`不支持的跳转方式: ${method}`));
	}

	// 构造跳转参数（排除自定义选项）
	const {
		method: _, // 排除 method
		showError,
		success,
		fail,
		complete,
		...otherOptions
	} = options;

	const navigationOptions = {
		url: toUrl,
		success: (res) => {
			if (success && typeof success === 'function') {
				success(res);
			}
		},
		fail: (err) => {
			console.error('跳转失败:', err);
			if (fail && typeof fail === 'function') {
				fail(err);
			}
			if (showError !== false) {
				uni.showToast({
					title: '页面跳转失败',
					icon: 'none',
					duration: 2000
				});
			}
		},
		complete: () => {
			if (complete && typeof complete === 'function') {
				complete();
			}
		},
		...otherOptions
	};

	// 返回 Promise
	return new Promise((resolve, reject) => {
		uniMethod({
			...navigationOptions,
			success: (res) => {
				navigationOptions.success(res);
				resolve(res);
			},
			fail: (err) => {
				navigationOptions.fail(err);
				reject(err);
			},
			complete: navigationOptions.complete
		});
	});
};

export const goBack = (val = 1) => {
	// 使用 navigateBack 返回上一页
	uni.navigateBack({
		delta: val, // delta 表示返回的层级数，1 表示返回上一级
		success: () => {
			console.log('成功返回上一页');
		},
		fail: (err) => {
			console.error('返回失败', err);
		}
	});
}

// 拨打电话
export const call = async (num) => {
	function dd() {
		uni.makePhoneCall({
			phoneNumber: `${num || '114'}` //仅为示例
		})
	}
	// #ifdef APP
	checkPermission('call_phone').then(res => {
		if (res == 1) {
			dd()
		}
	})
	// #endif
	// #ifndef APP
	dd()
	// #endif
}

// 获取位置信息
export const getLocation = () => {
	return new Promise((resolve, reject) => {
		uni.getLocation({
			type: 'wgs84',
			success: function(res) {
				resolve({
					...res
				})
			},
			fail: function() {
				uni.showToast({
					title: '获取位置信息失败',
					icon: 'none'
				});
			}
		});
	})
}

// 获取微信还是支付宝环境
export const getEnv = () => {
	// 定义常量以便于维护
	const WECHAT = 'micromessenger';
	const ALIPAY = 'alipayclient';

	// 小程序环境判断
	// #ifdef MP-WEIXIN
	return 'mp-weixin';
	// #endif

	// #ifdef MP-ALIPAY
	return 'mp-alipay';
	// #endif

	// H5环境判断
	// #ifdef H5
	const ua = navigator.userAgent.toLowerCase();
	if (ua.indexOf(WECHAT) > -1) {
		return 'h5-weixin';
	} else if (ua.indexOf(ALIPAY) > -1) {
		return 'h5-alipay';
	}

	return 'h5';
	// #endif

	// 默认返回空字符串或其他默认值
	return '';
};

// 获取用户环境
export const getUserEnv = () => {
	// console.log('uni.getSystemInfoSync()==>', uni.getSystemInfoSync());
	if (typeof navigator !== 'undefined') {
		// 浏览器环境
		const ua = navigator.userAgent.toLowerCase();
		if (/micromessenger/i.test(ua)) {
			return 'weixin';
		}
		if (/alipayclient/i.test(ua)) {
			return 'alipay';
		}
		if (/android/i.test(ua)) {
			return 'android';
		}
		if (/iphone|ipad/i.test(ua)) {
			return 'ios';
		}
	}

	return uni.getSystemInfoSync()?.uniPlatform;
};

// 获取用户环境
export const getSystemInfo = () => {
	// console.log('uni.getSystemInfoSync()==>', uni.getSystemInfoSync());
	return uni.getSystemInfoSync();
};

/**
 * 判断是否为空值（null、undefined、空字符串、空对象、空数组）
 * @param {*} value
 * @returns {boolean}
 */
export const isEmpty = (value) => {
	// null 或 undefined
	if (value === null || typeof value === 'undefined') {
		return true;
	}

	// 数字 0、NaN 不认为是空
	if (typeof value === 'number' && !isNaN(value)) {
		return false;
	}

	// 布尔值：false 不认为是空
	if (typeof value === 'boolean') {
		return false;
	}

	// 字符串：仅空格也认为是空
	if (typeof value === 'string') {
		return value.trim() === '';
	}

	// 数组或对象
	if (typeof value === 'object') {
		// 数组
		if (Array.isArray(value)) {
			return value.length === 0;
		}
		// 对象
		return Object.keys(value).length === 0;
	}

	// 其他情况（如 function）不认为是空
	return false;
};